昨天我們介紹了「傳值」與「傳址」,所以呢,按照昨天的範例我們應該可以統整出一個結論是基本型是「傳值」,物件是「傳址」,但往往就是會有例外。今天就來讓我們來看看例外吧!
Pass by sharing
我們直接來看看範例:
var apple = {value: 10};
function rising(obj){
obj = {value: 25};
}
rising(apple);
console.log(apple.value); //10
如果我們用之前的「傳址」來更新資料,那不是應該印出25怎麼還是10?
其實就是因為它應該是透過「pass by sharing」的形式傳遞,那它的特點就是當function的參數obj被重新賦值的時候,外部的內容是不會被改變的,如果不是重新賦值那就會跟原本預期的一樣:
var apple = {value: 10};
function rising(obj){
obj.value = 25;
}
rising(apple);
console.log(apple.value); //25
所以這邊做個小小統整,JavaScript物件更新時會影響到引用這個物件的變數,修改時會變動到原本的參考。而當賦予新值時,會產生新的實體參考。
以上就是關於物件的資料傳遞。JavaScript的基礎介紹就到這邊,接下來的幾天要進入leetcode的練習,我們明天見吧!